TP 3-INSTRUCTIONS RÉPÉTÉES-CORRIGÉ

Ex1) b)

n=10 ;u=1;Do[u=a u,{n}];u

Si la valeur de u au sortir de la k-ième boucle est (Subscript[u, k]),on a la relation de récurrence:(Subscript[u, k])=(Subscript[au, k-1]);(Subscript[u, n])est donc égal à a.a...a =(a^n).

c)

u=a;Do[u=u^a,{n}];u

Ici, (Subscript[u, k])=((((Subscript[u, k-1])))^a); (Subscript[u, n])est donc égal à (a^(a^n)).

d)

u=a;Do[u=a^u,{n}];u

Ici, (Subscript[u, k])=(a^(Subscript[u, k-1])); (Subscript[u, n])est donc égal à (a^(a^(..a))) avec n "a" dans l'exposant.

Ex2)

Evidemment,(Subscript[u, n])=1/3 pour tout n,mais:

n=1000;u=1./3;Do[u=-2u+1,{ n}];u

Ceci provient de ce que 1./3  n'est pas égal à 1/3 mais à  0.3333333333333333`et que la suite ((Subscript[u, n])) diverge dès que (Subscript[u, 0]) est différent de 1/3 .

Ex3)

a)

n=4;{F,G}={0,1};Do[Print[F," ",G];{F,G}={G,F+G} ,{n}];F

A la sortie de la boucle,F et G sont égaux respectivement à (Subscript[F, n])et (Subscript[F, n+1])

b)

n=4;{F,G}={0,1};Do[Print[F," ",G];F=G;G=F+G ,{n}];F

En effet, une fois que F a été modifiée, elle a perdu sa valeur antérieure!

c) Une parade sans utiliser les couples :
  introduire une variable auxiliaire F1 qui conserve la valeur de F.

n=4;{F,G}={0,1};Do[Print[F," ",G];F1=F;F=G;G=F1+G ,{n}];F

d)

n=4;{F,G}={0,1};Do[Print[F," ",G];F=F+G;G=F+G ,{n}];F

A la sortie de la boucle,F et G sont cette fois égaux respectivement à (Subscript[F, 2n])et (Subscript[F, 2n+1])

e)

n=10;{u,v,w}={0,1,2};Do[{u,v,w}={v,w,2w+u} ,{n}];u

Ex4)

n=4;T=1;U=Cos[t];
Do[Print[T];{T,U}={U,2Cos[t]U-T// Expand},{n}];T
TrigExpand[Cos[n t]]/.( Sin[t]-> (1-Cos[t]^2)^(1/2) ) // Expand

Ex5)
 a)

n=10;u=0;Do[u=u+k,{k,1,n}];u

Si la valeur de u au sortir de la k-ième boucle est (Subscript[u, k]),on a la relation de récurrence:(Subscript[u, k])=(Subscript[u, k-1])+k ;(Subscript[u, n])est donc égal à 1+2+...+n =n(n+1)/2.

b)

u=0;Do[u=u+2k-1,{k,n}];u

Si la valeur de u au sortir de la k-ième boucle est (Subscript[u, k]),on a la relation de récurrence:(Subscript[u, k])=(Subscript[u, k-1])+2k-1 ;(Subscript[u, n])est donc égal à 1+3+...+2n-1 =(n^2).

c)

u=0;Do[u=u+k,{k,1,2n,2}];u

Ici, le u final est la somme de tous les impairs de 1 jusqu' à 2 n (le dernier est donc 2 n - 1), donc le résultat est le même que pour b).

d)

u=1;Do[u=u k,{k,n}];u
n!

Si la valeur de u au sortir de la k-ième boucle est (Subscript[u, k]),on a la relation de récurrence:(Subscript[u, k])=k (Subscript[u, k-1 ]);(Subscript[u, n])est donc égal à 1.2.....n =n!.

e)

u=0;Do[u=u+Prime[k],{k,n}];u

Si la valeur de u au sortir de la k-ième boucle est (Subscript[u, k]),on a la relation de récurrence:(Subscript[u, k])=(Subscript[u, k-1])+(Subscript[p, k ]);(Subscript[u, n])est donc égal à la somme des n premiers nombres premiers.

Ex6) Coefficients binomiaux.

n=100;p=50;c=1;Do[c=c(n-k+1)/k ,{k,p}];c
Binomial[n,p]

Ex7) Calcul de e
    a) Méthode "bête"

n=2000;e=0;t=TimeUsed[];
Do[e=e+1/k!,{k,0,n}]
TimeUsed[]-t
N[e,50]
N[Exp[1],50]

b) Méthode directe, mais avec calcul de la factorielle en temps réel

n=2000;e=0;u=1;t=TimeUsed[];
Do[e=e+1/u;u=k u,{k,n}]
TimeUsed[]-t
N[e,50]

c) Méthode de Horner.

n=2000;e=1;t=TimeUsed[];
Do[e=e/k+1,{k,n,1,-1}]
TimeUsed[]-t
N[e,50]

Dans le c) il y a n divisions, dans le b) il y a n divisions et n multiplications, et dans le a) il y a  1 + 2 + .. + n ~((n^2)/2) multiplications et n divisions !

Ex8) Années avec 3 zéros

mini=1500;maxi=2500; 
Do [Print[a b^3," s'écrit ",a 10^3," en base ",b],{b ,2 ,maxi},{a,Ceiling[mini/b^3] ,Min[b-1,maxi/b^3]}]

REM : 1944 = 9 . (6^3) et pourtant 1944 n'apparait pas ci-dessus ; pourquoi ?

Avec 4 zéros, on obtient :

mini=1500;maxi=2500; 
Do [Print[a b^4" s'écrit ",a 10^4," en base ",b],{b ,2 ,maxi/3},{a,Ceiling[mini/b^4] ,Min[maxi/b^4,b-1]}]

A votre avis, y aura t - il en l'an 4000 en base 8 (= 2048) une fête similaire à celle de l'an 2000 ???

Ex9) Triangle de Pascal.

n=5;c[0,0]=1;Do[c[i,i+1]=0;c[i,-1]=0, {i , 0 , n-1 } ]; Do[c[i,j]=c[i-1,j]+c[i-1,j-1],{i, n },{j,0, i }];
MatrixForm[Table[c[i,j],{i,0,n},{j,0,i}]]

Boucle while

s=0;n=1;While[s<10,s=s+1/n;n++];
Print[n," ",N[s]," ",N[s-1/n]]

Ex10)

u=1;While[Not[Floor[(u^3+24)^(1/10)]^10==u^3+24],u++];u

On cherche ici le plus petit cube qui, augmenté de 24, va donner une puissance dixième exacte ; résultat : (10^3) + 24 = (2^10).

Ex11)

n=100;p=2;While [NextPrime[p]-p≤n , p=NextPrime[p]] ;Print["Première suite de ",n," composés consécutifs : de ", p+1," à ",p+n]

Ex12) Moyenne arithmético - géométrique.

n=50;e=10^(-n);u=N[1,n+5];v=N[2,n+5];k=0;While[v-u>e,{u,v}={Sqrt[u v],(u+v)/2};k++];Print["moyenne arithmético-géométrique = ",N[u,n+1]," obtenue en ",k," coups"]

Conclusion : en 6 coups, on obtient déjà 50 décimales exactes!
Remarquons que si l'on fait l'erreur suivante (qui donne l'algorithme de Borchardt) :

e=10^(-n);u=N[1,n+5];v=N[2,n+5];k = 0 ;While [v-u>e ,u=Sqrt[u v];v=(u+v)/2 ;k++];Print["fausse moyenne arithmético-géométrique = ",N[u,n+1]," obtenue en ",k," coups"]

La convergence est bien plus lente : sauriez - vous dire pourquoi?